package com.ssy.lingxi.workflow.serviceimpl;

import com.ssy.lingxi.workflow.entity.ExternalTaskDefinition;
import com.ssy.lingxi.workflow.entity.InternalTaskDefinition;
import com.ssy.lingxi.workflow.model.constant.TaskNameEnum;
import com.ssy.lingxi.workflow.model.constant.WorkflowStringEnum;
import com.ssy.lingxi.workflow.service.IInternationalizeService;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;

/**
 * 流程步骤名称国际化服务实现类
 * @author 万宁
 * @version 2.0.0
 * @date 2022-02-22
 */
@Service
public class InternationalizeServiceImpl implements IInternationalizeService {
    @Resource
    private MessageSource messageSource;

    /**
     * 查询外部流程步骤名称
     *
     * @param externalTaskDefinition 外部流程定义
     * @return 国际化翻译后的外部流程步骤名称
     */
    @Override
    public String findExternalTaskName(ExternalTaskDefinition externalTaskDefinition) {
        return findTaskName(externalTaskDefinition.getTaskName());
    }

    /**
     * 查询内部流程步骤名称
     *
     * @param internalTaskDefinition 内部流程定义
     * @return 国际化翻译后的内部流程步骤名称
     */
    @Override
    public String findInternalTaskName(InternalTaskDefinition internalTaskDefinition) {
        return findTaskName(internalTaskDefinition.getTaskName());
    }

    /**
     * 查询流程步骤名称
     *
     * @param processTaskName 流程图中的步骤名称
     * @return 国际化翻译后的流程步骤名称
     */
    @Override
    public String findTaskName(String processTaskName) {
        Integer code = StringUtils.hasLength(processTaskName) ? TaskNameEnum.findCodeByName(processTaskName.replaceAll("^\\d+[：:]", "")) : 0;
        if(code.equals(0)) {
            return "";
        }

        try {
            return messageSource.getMessage("TaskNameEnum.".concat(String.valueOf(code)), null, LocaleContextHolder.getLocale());
        } catch (Exception ingored) {
            return "";
        }
    }

    /**
     * 查询工作流服务字符串常量国际化翻译
     *
     * @param stringEnum 常量字符串枚举
     * @return 国际化翻译后的内容
     */
    @Override
    public String findMessage(WorkflowStringEnum stringEnum) {
        try {
            return messageSource.getMessage(stringEnum.getPropertyKey(), null, LocaleContextHolder.getLocale());
        } catch (Exception ingored) {
            return "";
        }
    }
}
